package com.coderising.litestruts;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
public class Configureation {
Map<String,ActionConfig> actions=new HashMap<>();
public Configureation(String fileName)
{
String packageName=this.getClass().getPackage().getName();
packageName=packageName.replace('.', '/');
InputStream is=this.getClass().getResourceAsStream("/"+packageName+"/"+fileName);
parseXML(is);
try{
is.close();
}
catch(IOException e){
e.printStackTrace();
}
}
private void parseXML(InputStream is) {
SAXBuilder builder=new SAXBuilder();
try{
Document doc=builder.build(is);
Element root =doc.getRootElement();
for(Element actionElement :root.getChildren("action"))
{
String actionName=actionElement.getAttributeValue("name");
String clzName=actionElement.getAttributeValue("class");
ActionConfig ac=new ActionConfig(actionName,clzName);
for(Element resultElement:actionElement.getChildren())
{
String resultName=resultElement.getAttributeValue("name");
String viewName=resultElement.getText().trim();
ac.addViewResult(resultName, viewName);
}
this.actions.put(actionName, ac);//把actionName以及其下面的resultName和viewName构成一个键值对
}
}
catch(JDOMException e){
e.printStackTrace();
} catch(IOException e)
{
e.printStackTrace();
}
}
public String getClassName(String action) {
ActionConfig ac=this.actions.get(action);
if(ac==null)
{
return null;
}
return ac.getClassName();
}
public String getResultView(String action,String resultName)
{
ActionConfig ac=this.actions.get(action);
if(ac==null){
return null;
}
return ac.getViewName(resultName);
}
private static class ActionConfig{
String name;
String clzName;
Map<String,String> viewResult=new HashMap<>();
public ActionConfig(String actionName,String clzName){
this.name=actionName;
this.clzName=clzName;
}
public String getClassName(){
return clzName;
}
public void addViewResult(String name,String viewName){
viewResult.put(name, viewName);
}
public String getViewName(String resultName)
{
return viewResult.get(resultName);
}
}
}